import pygame
from cls.human import Human
# 初始化mixer
pygame.mixer.init()

# 和human一样，所以不多加注释
class Bullet(pygame.sprite.Sprite):

    # 添加类属性：
    shoot_delay = 500#毫秒,发射间隔
    last_shoot_delay = 0#上次发射的时间

    def __init__(self):
        super(Bullet,self).__init__()
        self.speed = 20
        self.image = pygame.image.load("./pic/bullet.png")#加载图片
        self.music_bullet = pygame.mixer.Sound("./music/bullet.wav")  # 子弹发射的声音
        self.rect = self.image.get_rect()
        self.direction = 0
        self.angle = 0  # 子弹也需要转向，故也有角度
        self.last = 0  # 子弹也需要转向，故也有上一个方向

    def update(self, *args):#更新子弹的位置
        if(self.direction == 0):
            self.rect.x += self.speed
        elif(self.direction == 1):
            self.rect.y -= self.speed
        elif(self.direction == 2):
            self.rect.x -= self.speed
        elif(self.direction == 3):
            self.rect.y += self.speed

    # 根据子弹人物的方向，设置子弹的起始位置：
    def fun1(self,position):
        if Human.last == 0:
            self.trunD(Human.last)
            self.rect.x = position[0] + 110
            self.rect.y = position[1] + 100
        elif Human.last == 2:
            self.trunD(Human.last)
            self.rect.x = position[0]
            self.rect.y = position[1] + 100
        else:
            self.rect.x = position[0]
            self.rect.y = position[1] + 100

    # 定义类方法
    @classmethod
    def new_bullet(cls):
        if pygame.time.get_ticks() - cls.last_shoot_delay > cls.shoot_delay:
            cls.last_shoot_delay = pygame.time.get_ticks()
            return Bullet()

    # 用于子弹转向
    def trunD(self,j):
        self.angle = (j - self.last) * 90  # 改变转换角度
        self.last = j  # 改变上一个方向的值
        self.image = pygame.transform.rotate(self.image, self.angle)  # 转向


    def soundS(self):
        self.music_bullet.play()